home *** CD-ROM | disk | FTP | other *** search
- /* =======================================
-
- File: HandleTheMenus.c
- Function: Handle any menu selections.
- History: 4/27/89 Original by Prototyper.
- 4/27/89 modified by c. keith ray
-
- ====================================== */
-
- #include "HandleTheMenus.h"
-
- /* *********************************** */
- /* These are the other includes for general routines */
- /* #include <colortoolbox.h> */
- #include <Strings.h>
- #include <IM1_5Protos.h> /* includes every-mac-thing that THINK has defined */
- #include "color_transfer_modes.h"
-
- extern char *strcpy (Str255 *, char *); /* LSC string prototype */
-
- /* *********************************** */
-
- #define TRUE 1
- #define FALSE 0
- #define NIL 0
-
- #define ABS(x) ( (x) < 0 ? -(x) : (x) )
-
- /* *********************************** */
-
- /* External routines that are called */
-
- #include "about_alert.h"
- #include "Source_2.h"
- #include "Source_1.h"
- #include "Result.h"
-
- extern WindowPtr Result_Window;
- extern WindowPtr proton_Window;
- extern WindowPtr flourine_Window;
-
- extern MenuHandle AppleMenu;
- extern MenuHandle FileMenu;
- extern MenuHandle EditMenu;
- extern MenuHandle ModeMenu;
-
- extern short pix_zoom;
- extern short clipboard_empty;
- extern short add_mode;
- extern short src_changed;
-
- /* menus-lists and menu-items that change depending on window, zoom, or clipboard */
- /* Item_Open_Pict */
- /* Item_Close */
- /* Item_Save_Pict */
- /* Item_Magnify */
- /* Item_Reduce */
- /* Item_Undo */
- /* Item_Cut */
- /* Item_Copy */
- /* Item_Paste */
- /* Item_Clear */
- /* Item_Select_All */
- /* Item_Crop */
- /* List_Mode */
-
- void Update_Menus( tempWindow )
- WindowPtr tempWindow;
- {
- if ( tempWindow != NIL )
- /* test if no windows in front - which should be impossible for this program */
- {
- if ( tempWindow == proton_Window )
- {
- EnableItem( FileMenu, Item_Open_Pict );
- DisableItem( FileMenu, Item_Close );
- DisableItem( FileMenu, Item_Save_Pict );
- if ( pix_zoom == 1 )
- {
- EnableItem (FileMenu, Item_Magnify);
- DisableItem (FileMenu, Item_Reduce); /* disable reduce menu */
-
- }
- else if (pix_zoom == 8)
- {
- DisableItem (FileMenu, Item_Magnify); /* disable magnify menu */
- EnableItem (FileMenu, Item_Reduce);
- }
- else
- {
- EnableItem (FileMenu, Item_Magnify); /* enable magnify menu */
- EnableItem (FileMenu, Item_Reduce);
- }
- DisableItem(EditMenu, Item_Undo);
- DisableItem(EditMenu, Item_Cut);
- DisableItem(EditMenu, Item_Copy);
- if ( clipboard_empty == TRUE )
- {
- DisableItem(EditMenu, Item_Paste);
- }
- else
- {
- EnableItem(EditMenu, Item_Paste);
- }
- EnableItem(EditMenu, Item_Crop);
- EnableItem( ModeMenu , 0);
- }
- else if ( tempWindow == flourine_Window )
- {
- EnableItem( FileMenu, Item_Open_Pict );
- DisableItem( FileMenu, Item_Close );
- DisableItem( FileMenu, Item_Save_Pict );
- if ( pix_zoom == 1 )
- {
- EnableItem (FileMenu, Item_Magnify);
- DisableItem (FileMenu, Item_Reduce); /* disable reduce menu */
-
- }
- else if (pix_zoom == 8)
- {
- DisableItem (FileMenu, Item_Magnify); /* disable magnify menu */
- EnableItem (FileMenu, Item_Reduce);
- }
- else
- {
- EnableItem (FileMenu, Item_Magnify); /* enable magnify menu */
- EnableItem (FileMenu, Item_Reduce);
- }
- DisableItem(EditMenu, Item_Undo);
- DisableItem(EditMenu, Item_Cut);
- DisableItem(EditMenu, Item_Copy);
- if ( clipboard_empty == TRUE )
- {
- DisableItem(EditMenu, Item_Paste);
- }
- else
- {
- EnableItem(EditMenu, Item_Paste);
- }
- EnableItem(EditMenu, Item_Crop);
- EnableItem( ModeMenu , 0);
- }
- else if ( tempWindow == Result_Window )
- {
- DisableItem( FileMenu, Item_Open_Pict );
- DisableItem( FileMenu, Item_Close );
- EnableItem( FileMenu, Item_Save_Pict );
- if ( pix_zoom == 1 )
- {
- EnableItem (FileMenu, Item_Magnify);
- DisableItem (FileMenu, Item_Reduce); /* disable reduce menu */
-
- }
- else if (pix_zoom == 8)
- {
- DisableItem (FileMenu, Item_Magnify); /* disable magnify menu */
- EnableItem (FileMenu, Item_Reduce);
- }
- else
- {
- EnableItem (FileMenu, Item_Magnify); /* enable magnify menu */
- EnableItem (FileMenu, Item_Reduce);
- }
- DisableItem(EditMenu, Item_Undo);
- EnableItem(EditMenu, Item_Cut);
- EnableItem(EditMenu, Item_Copy);
- DisableItem(EditMenu, Item_Paste);
- EnableItem(EditMenu, Item_Crop);
- EnableItem( ModeMenu , 0);
- }
- else /* desk accessory in front */
- {
- DisableItem( FileMenu, Item_Open_Pict );
- EnableItem( FileMenu, Item_Close );
- DisableItem( FileMenu, Item_Save_Pict );
-
- DisableItem (FileMenu, Item_Magnify);
- DisableItem (FileMenu, Item_Reduce); /* disable reduce menu */
-
- EnableItem(EditMenu, Item_Undo);
- EnableItem(EditMenu, Item_Cut);
- EnableItem(EditMenu, Item_Copy);
- if ( clipboard_empty == TRUE )
- {
- DisableItem(EditMenu, Item_Paste);
- }
- else
- {
- EnableItem(EditMenu, Item_Paste);
- }
- DisableItem(EditMenu, Item_Crop);
- DisableItem( ModeMenu , 0);
- }
- }
- }
-
- void HandleMenu (doneFlag, theMenu, theItem, theInput)
- char *doneFlag;
- short theMenu, theItem;
- TEHandle *theInput;
- {
- GrafPtr SavePort;
- Str255 DAName;
- short DNA; /* DA selection ID */
- char BoolHolder; /* Boolean used in handling edit commands */
-
- WindowPeek da_window;
-
- switch (theMenu)
- {
-
- case List_Apple:
- switch (theItem)
- {
- case Item_About_Add_Images:
- A_about_alert ();
- break;
- default: /* Handle the DAs */
- GetPort (&SavePort);
- GetItem (AppleMenu, theItem, (char *)&DAName);
- DNA = OpenDeskAcc ((char *)&DAName);
- SetPort (SavePort);
- break;
- }
- break;
-
-
- case List_File:
- switch (theItem)
- {
- case Item_Open_Pict:
- /* ?? ADD IN HERE WHAT THIS ITEM SHOULD DO
- -- check to see if proton or flourine is on top
- -- if one of them is, then My_Read_Image() for that window
- */
- if ( FrontWindow() == flourine_Window )
- {
- read_flourine();
- }
- else if ( FrontWindow() == proton_Window )
- {
- read_proton();
- }
- break;
- case Item_Close: /* assume that update_menus etc. prevents us from trying to close normal windows */
- da_window = (WindowPeek) ( FrontWindow() );
- CloseDeskAcc ( (*da_window).windowKind);
- break;
- case Item_Save_Pict:
- /* ?? ADD IN HERE WHAT THIS ITEM SHOULD DO
- -- check to see if Result is on top, if it is,
- -- then My_Write_Image()
- */
- save_result();
- break;
- case Item_Magnify:
- pix_zoom *= 2; /* multiply zoom factor by 2 */
- UpDate_Result(Result_Window); /* force redraw at new magnification */
- UpDate_proton(proton_Window);
- UpDate_flourine(flourine_Window);
- break;
- case Item_Reduce:
- pix_zoom /= 2; /* divide zoom factor by 2 */
- UpDate_Result(Result_Window); /* force redraw at new magnification */
- UpDate_proton(proton_Window);
- UpDate_flourine(flourine_Window);
- break;
- case Item_Quit:
- *doneFlag = TRUE; /* Set exit the program flag */
- break;
- default:
- break;
-
- }
- break;
-
-
- case List_Edit:
- BoolHolder = SystemEdit (theItem - 1); /* Do DA editing */
- if (BoolHolder == FALSE) /* If not a DA then we get it */
- {
- switch (theItem)
- {
- case Item_Undo:
-
- break;
- case Item_Cut:
- if ( FrontWindow() == Result_Window )
- {
- cut_result();
- }
- break;
- case Item_Copy:
- if ( FrontWindow() == Result_Window )
- {
- copy_result();
- }
- break;
- case Item_Paste:
- if ( FrontWindow() == proton_Window )
- {
- paste_proton();
- }
- else if ( FrontWindow() == flourine_Window )
- {
- paste_flourine();
- }
- break;
- case Item_Clear:
- if ( FrontWindow() == Result_Window )
- {
- /* clear both source images */
- clear_flourine();
- clear_proton();
- clear_result();
-
- }
- else if ( FrontWindow() == proton_Window )
- {
- /* clear source 1 image */
- clear_proton();
- }
- else if ( FrontWindow() == flourine_Window )
- {
- /* clear souce 2 image */
- clear_flourine();
- }
- break;
- case Item_Select_All:
- break;
- case Item_Crop:
- /*
- this is supposed to trim the result & source images to be the
- size of the window's displayable area.
- */
- break;
- default:
- break;
-
- }
- }
- break;
-
-
- case List_Mode:
- do_checkmark( ModeMenu, theItem, Item_Add_Over, Item_Exclusive_Or_Invert);
- switch (theItem)
- {
- case Item_Add_Over:
- add_mode = addOver;
- break;
- case Item_Add_Pin:
- add_mode = addPin;
- break;
- case Item_Sub_Over:
- add_mode = subOver;
- break;
- case Item_Sub_Pin:
- add_mode = subPin;
- break;
- case Item_Maximum:
- add_mode = adMax;
- break;
- case Item_Minimum:
- add_mode = adMin;
- break;
- case Item_Blend:
- add_mode = blend;
- break;
- case Item_Transparent:
- add_mode = transparent;
- break;
- case Item_Copy_Mode:
- add_mode = srcCopy;
- break;
- case Item_Copy_Invert:
- add_mode = notSrcCopy;
- break;
- case Item_Or:
- add_mode = srcOr;
- break;
- case Item_Or_Invert:
- add_mode = notSrcOr;
- break;
- case Item_Change_Black:
- add_mode = srcBic;
- break;
- case Item_Change_Black_Invert:
- add_mode = notSrcBic;
- break;
- case Item_Exclusive_Or:
- add_mode = srcXor;
- break;
- case Item_Exclusive_Or_Invert:
- add_mode = notSrcXor;
- break;
- default:
- break;
- }
- src_changed = TRUE; /* force updating the contents of the result window */
- UpDate_Result(Result_Window);
- break;
-
- default:
- break;
-
- }
-
- HiliteMenu (0); /* Turn menu selection off*/
- }
-
-
-
- void do_checkmark( menuh, item, groupstart, groupend)
- MenuHandle menuh;
- short item, groupstart, groupend;
- /* a utility-function to handle a check-mark-group in any menu */
- {
- short i;
- for (i = groupstart; i < groupend; i++)
- {
- if ( i == item)
- {
- CheckItem(menuh, i, true);
- }
- else
- {
- CheckItem(menuh, i, false);
- }
- }
- }
-